// // 如何请求接口? 如果用的不是umimax,就无法使用它的request和useRequest
// 但是可以用插件,'umi-request'
import { extend } from "umi-request" //此插件就是对axios的封装
import { history } from "umi"

let http = extend({
    baseURL: '/api',
    headers: {},
    timeout: 6000,
    credentials: 'include' //默认请求是否带上cookie
})
// 全局请求拦截器
http.interceptors.request.use((url: string, options: any) => {
    // console.log(url) // /api/users这种接口
    // console.log(options)
    let token = localStorage.getItem("mi-token")
    // console.log(token)
    if (token) {
        // 两种在请求协议头加token的方式是一样的
        // options.headers = {
        //     ...options.headers,
        //     authorization: token
        // }
        options.headers['authorization'] = token
    }
    return {
        url,
        options
    }
})

// 全局响应拦截器  有1-2个参数,分别是响应数据回调,和响应错误回调
// 在 response 回调里面，一定要返回 response，否则会导致请求失败。
// 在 error 回调里面，一定要返回 Promise.reject(error)，否则会导致请求错误时不会进入 catch。
http.interceptors.response.use(async (response, options) => {
    // console.log(response) //大致格式如下
    // console.log(options)
    // response{
    //     body: ReadableStream
    //     bodyUsed: true,
    //     headers: Headers {},
    //     ok: true,
    //     redirected: false,
    //     status: 200,
    //     statusText: "OK",
    //     type: "basic",
    //     url: "http://localhost:8000/api/data/index.json"
    // }
    // options{
    //     baseURL:"/",
    //     credentials:"include",
    //     headers:{authorization:'123'},
    //     method:"GET",
    //     params:{},
    //     timeout:6000,
    //     url:"/api/data/index.json"
    // }
    let res = await response.clone().json()
    // console.log(res)
    if (res) {
        return response
    } else {
        // 1.排除掉不需要提示的请求路径
        let excludePaths = ['/order/query_order_status']
        if (!excludePaths.includes(options.url)) {
            console.log(res.msg);
            // 错误的结果
            // message.open({ type: 'error', content: res.msg })
        }
        // 2.判断登录失效的情况 10022(登录状态过期) 1004(token失效 校验失败)
        if (res.code == "10022" || res.code == "1004") {
            // 清除token
            localStorage.removeItem("mi-token")
            // 回到登录页
            history.push('/login')
            // 清除本地缓存
            window.location.reload()
        }
        // 将错误抛出,后面用try catch(e)捕捉
        return Promise.reject(res.msg)
    }
})

export default http